package com.ssc.nav.utils

import com.ssc.nav.data.NavItem
import com.ssc.nav.extension.NavPluginExtension
import org.gradle.api.Project
import java.io.File
import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult

/**
 * user: jyt
 * DATA: 2024/9/10
 * TIME: 14:37
 */
object XmlCreateUtils {

    fun createNavXml(
        extension: NavPluginExtension,
        map: MutableMap<String, NavItem>
    ) {
      /*  val targetDir = File(
            target.projectDir.parentFile.parentFile,
            "/app/src/main/res/navigation"
        )*/
        val targetDir =extension.navDir

        if (!targetDir.exists()) {
            targetDir.mkdirs()
        }

        val targetFile = File(targetDir,extension.navFileName)

        // 使用DocumentBuilder创建XML文档
        val documentBuilder: DocumentBuilder =
            DocumentBuilderFactory.newInstance().newDocumentBuilder()
        val document = documentBuilder.newDocument()

        // 创建xml元素
        /*val xmlElement = document.createElement("?xml")
        xmlElement.setAttribute("version", "1.0")
        xmlElement.setAttribute("encoding", "utf-8")
        document.appendChild(xmlElement)*/
        //创建navigation元素
        val text = """
            这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
            这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
            这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
            这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
            这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
            这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
            这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
        """.trimIndent()
        val comment = document.createComment(text)
        document.appendChild(comment)

        val navigationElement = document.createElement("navigation")
        navigationElement.setAttribute(
            "xmlns:android",
            "http://schemas.android.com/apk/res/android"
        )
        navigationElement.setAttribute("xmlns:app", "http://schemas.android.com/apk/res-auto")
        navigationElement.setAttribute("xmlns:tools", "http://schemas.android.com/tools")

        for (item in map) {
            val itemElement = document.createElement("fragment")
            itemElement.setAttribute("android:id", "@+id/${item.value.name}")
            itemElement.setAttribute(
                "android:name",
                "${item.value.clazz}"
            )
            if (item.value.startDestination == "true") {
                navigationElement.setAttribute("app:startDestination", "@+id/${item.value.name}")
            }
            if (item.value.navIgone != "true") {
                navigationElement.appendChild(itemElement)
            }
        }
        document.appendChild(navigationElement)


        // 写入XML文件
        val transformer = TransformerFactory.newInstance().newTransformer()
        transformer.setOutputProperty(OutputKeys.INDENT, "yes")
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4")
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no")
        val source = DOMSource(document)
        val result = StreamResult(targetFile)

        transformer.transform(source, result)


        println("XML file generated at: ${targetFile.absolutePath}")

    }
}